home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / ldbmp08 / ldbmp08s.lzh / LDBMP8.S < prev    next >
Text File  |  1997-06-12  |  30KB  |  1,563 lines

  1. *****************************************************************
  2. *    256色のBMP                        *
  3. *****************************************************************
  4.     .include    doscall.mac
  5.     .include    iocscall.mac
  6.     .include    myconst.h
  7.  
  8.     .xdef    _Rle8_extend
  9.     .xdef    _Bit8_conv
  10.     .xdef    _Bit8_prt
  11.     .xdef    _Bit8_scroll
  12.     .xdef    _Bit8_rewrite
  13.  
  14.     .xref    _Wait
  15.     .xref    _PageSync
  16.  
  17.     .xref    pal_set0
  18.     .xref    key_chk
  19.     .xref    tenkey_chk
  20.     .xref    cursor_chk
  21.     .xref    mouse_chk
  22.     .xref    x_set
  23.     .xref    y_set
  24.     .xref    inf_change
  25.  
  26.     .xref    line_byte
  27.     .xref    tate
  28.     .xref    yoko
  29.     .xref    x_max
  30.     .xref    y_max
  31.     .xref    x_pos
  32.     .xref    y_pos
  33.     .xref    os_type
  34.     .xref    gr_addr
  35.     .xref    fi_size
  36.     .xref    buff_addr
  37.     .xref    pal_addr
  38.     .xref    kflg
  39.     .xref    dflg
  40.     .xref    d_pat
  41.  
  42.     .xref    esc_flg
  43.     .xref    next_flg
  44.     .xref    inkey_flg3
  45.     .xref    scroll_key
  46.     .xref    s_dot8
  47.  
  48. WIN3        equ    40
  49. OS2v1        equ    12
  50. OS2v2        equ    64
  51.  
  52.     .text
  53.     .even
  54.  
  55. *****************************************************************
  56. *    RLE8展開                        *
  57. *****************************************************************
  58. _Rle8_extend:
  59.     bsr    tenkai
  60.     rts
  61.  
  62. *****************************************************************
  63. *    32kデータに変換                        *
  64. *****************************************************************
  65. _Bit8_conv:
  66.     bsr    convert
  67.     rts
  68.  
  69. *****************************************************************
  70. *    256色表示                        *
  71. *****************************************************************
  72. _Bit8_prt:
  73.     bsr    front_line_set        *表側に表示する横ドット数を求める
  74.     bsr    back_line_set        *裏側に表示する横ドット数を求める
  75.     bsr    y_line_set        *表示する縦ドット数を求める
  76.     bsr    bit8_prt        *表示
  77.     rts
  78.  
  79. *****************************************************************
  80. *    256色スクロール                        *
  81. *****************************************************************
  82. _Bit8_scroll:
  83.     bsr    scroll
  84.     rts
  85.  
  86. *****************************************************************
  87. *    画面の描き直し                        *
  88. *****************************************************************
  89. _Bit8_rewrite:
  90.     bsr    esc_rewrite
  91.     rts
  92.  
  93. *****************************************************************
  94. *    ランレングス圧縮の展開                    *
  95. *****************************************************************
  96. tenkai:
  97.     move.l    gr_addr(pc),a0        *展開元
  98.  
  99.     move.l    buff_addr(pc),a1
  100.     adda.l    fi_size(pc),a1
  101.     movea.l    a1,a2            *展開元MAX
  102.  
  103.     move.l    a1,d0            *展開先補正
  104.     btst.l    #0,d0
  105.     beq    tenkai_
  106.     addq.l    #1,a1
  107. tenkai_:
  108.     move.l    a1,gr_addr        *画像アドレス変更
  109.     movea.l    a1,a3            *取っておく
  110.  
  111. tenkai0:
  112.     cmpa.l    a0,a2
  113.     bls    tenkai9
  114.  
  115.     moveq.l    #0,d0
  116.     move.b    (a0)+,d0
  117.     beq    tenkai2
  118.     move.b    (a0)+,d1
  119.  
  120.     subq.w    #1,d0
  121. tenkai1:
  122.     move.b    d1,(a1)+
  123.     dbra.w    d0,tenkai1
  124.     bra    tenkai0
  125.  
  126. tenkai2:
  127.     moveq.l    #0,d0
  128.     move.b    (a0)+,d0
  129.  
  130.     cmp.b    #1,d0
  131.     bcs    tenkai5
  132.     beq    tenkai9
  133. *    cmp.b    #2,d0            *無視
  134. *    bne    tenkai2_
  135. *    addq.l    #2,a0
  136. *    bra    tenkai0_
  137.  
  138. tenkai2_:
  139.     btst.l    #0,d0            *偶数か
  140.     bne    tenkai4            *違う
  141.  
  142. tenkai3:
  143.     subq.w    #1,d0
  144. tenkai3_:
  145.     move.b    (a0)+,(a1)+
  146.     dbra.w    d0,tenkai3_
  147.     bra    tenkai0
  148.  
  149. tenkai4:
  150.     subq.w    #1,d0
  151. tenkai4_:
  152.     move.b    (a0)+,(a1)+
  153.     dbra.w    d0,tenkai4_
  154.     addq.l    #1,a0
  155.     bra    tenkai0
  156.  
  157. tenkai5:
  158.     adda.w    line_byte(pc),a3    *展開アドレスの補正
  159.     movea.l    a3,a1
  160.     bra    tenkai0
  161.  
  162. tenkai9:
  163.     rts
  164.  
  165. *****************************************************************
  166. *    32kデータに変換                        *
  167. *****************************************************************
  168. convert:
  169.     tst.b    dflg
  170.     bne    convert_
  171.  
  172.     movea.l    pal_addr(pc),a0        *パレットアドレス
  173.     movea.l    a0,a1
  174.     movea.l    a0,a3
  175.     bsr    pal_set0
  176.     movea.l    a3,a0
  177.     bra    convert__
  178.  
  179. convert_:
  180.     bsr    d_pal
  181.  
  182. convert__:
  183.     clr.w    bmp_x            *変換元アドレス取得
  184.     clr.w    bmp_y
  185.     bsr    get_bmp_addr
  186.  
  187.     move.w    tate(pc),d0        *変換先アドレス取得
  188.     mulu.w    line_byte(pc),d0
  189.     move.w    tate(pc),d1
  190.     subq.w    #1,d1
  191.     mulu.w    yoko(pc),d1
  192.     add.l    d1,d1
  193.     move.l    gr_addr(pc),a2
  194.     add.l    d0,a2
  195.     add.l    d1,a2
  196.     add.l    d0,gr_addr
  197.  
  198.     move.w    line_byte(pc),d0    *次のラインへの差分
  199.     add.w    yoko(pc),d0        *(変換元)
  200.     movea.w    d0,a3
  201.  
  202.     move.w    yoko(pc),d0        *次のラインへの差分
  203.     add.w    d0,d0            *(変換先)
  204.     move.w    d0,line_byte        *ついでに1ラインのバイト数を修正
  205.     add.w    d0,d0
  206.     movea.w    d0,a4
  207.  
  208.     move.w    yoko(pc),d5        *横ループ
  209.     move.w    tate(pc),d6        *縦ループ
  210.     subq.w    #1,d5
  211.     subq.w    #1,d6
  212.  
  213.     tst.b    dflg
  214.     bne    convert2
  215.  
  216. convert0:                *ノーマル
  217.     move.w    d5,d7
  218. convert1:
  219.     moveq.l    #0,d1
  220.     move.b    (a1)+,d1
  221.     add.w    d1,d1
  222.     move.w    0(a0,d1.w),(a2)+
  223.     dbra    d7,convert1
  224.     sub.l    a3,a1
  225.     sub.l    a4,a2
  226.     dbra    d6,convert0
  227.     rts
  228.  
  229. convert2:                *ディザ
  230.     lea.l    dpal_buf(pc),a0
  231.     moveq.l    #0,d2
  232.     move.w    #512,d3
  233.     move.w    #$07ff,d4
  234.     move.w    #2048,a6
  235.  
  236. convert3:
  237.     lea.l    (a0,d2.w),a5
  238.     move.w    d5,d7
  239.     moveq.l    #0,d0
  240. convert4:
  241.     moveq.l    #0,d1
  242.     move.b    (a1)+,d1
  243.     add.w    d1,d1
  244.     add.w    d0,d1
  245.     move.w    0(a5,d1.w),(a2)+
  246.     add.w    d3,d0
  247.     and.w    d4,d0
  248.     dbra    d7,convert4
  249.  
  250.     sub.l    a3,a1
  251.     sub.l    a4,a2
  252.     add.w    a6,d2
  253.     andi.w    #$1fff,d2
  254.     dbra    d6,convert3
  255.     rts
  256.  
  257. *****************************************************************
  258. *    ディザ表示用パレットテーブル作成            *
  259. *****************************************************************
  260. d_pal:
  261.     cmp.w    #WIN3,os_type
  262.     bne    d_pal_
  263.     lea.l    d_pal5(pc),a4
  264.     bra    d_pal0
  265. d_pal_:
  266.     lea.l    d_pal5_(pc),a4
  267.  
  268. d_pal0:
  269.     movea.l    pal_addr(pc),a0        *パレットアドレス
  270.     lea.l    dpal_buf(pc),a1
  271.     lea.l    d_pat(pc),a2
  272.     movea.l    a0,a3
  273.  
  274.     move.w    #$00f8,d7        *マスクデータ
  275.     move.w    #$f800,d3
  276.     move.w    #$07c0,d4
  277.  
  278.     moveq.l    #16-1,d5        *ループ2
  279. d_pal1:
  280.     move.w    #256-1,d6        *ループ1
  281.     move.b    (a2),d0
  282. d_pal2:
  283.     move.b    (a0)+,d1        *B
  284.     add.b    d0,d1
  285.     bcc    d_pal2_
  286.     moveq.l    #31*2,d1
  287.     bra    d_pal3
  288. d_pal2_:
  289.     and.w    d7,d1
  290.     lsr.b    #2,d1
  291.  
  292. d_pal3:
  293.     move.b    (a0)+,d2        *G
  294.     add.b    d0,d2
  295.     bcc    d_pal3_
  296.     or.w    d3,d1
  297.     bra    d_pal4
  298. d_pal3_:
  299.     and.w    d7,d2
  300. *    ror.w    #8,d2
  301.     move.b    d2,-(sp)        *ror.w    #8,d2の代わり
  302.     move.w    (sp)+,d2        *
  303.     clr.b    d2            *
  304.     or.w    d2,d1
  305.  
  306. d_pal4
  307.     move.b    (a0)+,d2        *R
  308.     add.b    d0,d2
  309.     bcc    d_pal4_
  310.     or.w    d4,d1
  311.     bra    d_pal5
  312. d_pal4_
  313.     and.w    d7,d2
  314.     rol.w    #3,d2
  315.     or.w    d2,d1
  316.     jmp    (a4)
  317.  
  318. d_pal5                    *Win3
  319.     move.w    d1,(a1)+
  320.     addq.l    #1,a0
  321.     dbra    d6,d_pal2
  322.     movea.l    a3,a0
  323.     addq.l    #1,a2
  324.     dbra    d5,d_pal1
  325.     rts
  326.  
  327. d_pal5_                    *OS/2 V1
  328.     move.w    d1,(a1)+
  329.     dbra    d6,d_pal2
  330.     movea.l    a3,a0
  331.     addq.l    #1,a2
  332.     dbra    d5,d_pal1
  333.     rts
  334.  
  335. *****************************************************************
  336. *    表側に表示する横ドット数を求める            *
  337. *****************************************************************
  338. front_line_set:
  339.     move.w    x_pos(pc),d0
  340.     add.w    yoko(pc),d0
  341.     cmp.w    #512,d0
  342.     bhi    front_line1
  343.     move.w    yoko(pc),x_line
  344.     bra    front_line2
  345. front_line1:
  346.     move.w    #512,d0
  347.     sub.w    x_pos(pc),d0
  348.     move.w    d0,x_line
  349. front_line2:
  350.     rts
  351.  
  352. *****************************************************************
  353. *    裏側に表示する横ドット数を求める            *
  354. *****************************************************************
  355. back_line_set:
  356.     clr.w    x_line_bk
  357.     clr.w    x_sabun_bk
  358.     clr.w    x_pos_bk
  359.  
  360.     move.w    x_pos(pc),d0        *裏画面を表示するか
  361.     add.w    yoko(pc),d0        *page0の左半分(左256dot)に収まるとき
  362.     cmp.w    #256,d0            *裏画面は表示しない
  363.     bls    back_line4
  364.  
  365.     move.w    x_pos(pc),d0        *表画面は右半分(右256dot)から表示しているか
  366.     sub.w    #256,d0
  367.     bmi    back_line2        *違う
  368.  
  369. back_line1:                *表画面の右側から表示
  370.     move.w    d0,x_pos_bk
  371.     move.w    yoko(pc),d0
  372.     cmp.w    x_line(pc),d0
  373.     bhi    back_line1_
  374.     move.w    x_line(pc),x_line_bk
  375.     bra    back_line1__
  376. back_line1_:
  377.     move.w    yoko(pc),x_line_bk
  378. back_line1__:
  379. *    clr.w    x_sabun_bk
  380.     bra    back_line4
  381.  
  382. back_line2:                *表画面の左側から右側に表示
  383.     move.w    yoko(pc),d0
  384.     cmp.w    #768,d0
  385.     bls    back_line3
  386.     move.w    #768,d0
  387. back_line3:
  388.     move.w    #256,d1
  389.     sub.w    x_pos(pc),d1
  390.     move.w    d1,x_sabun_bk
  391.     sub.w    d1,d0
  392.     move.w    d0,x_line_bk
  393. *    clr.w    x_pos_bk
  394. back_line4:
  395.     rts
  396.  
  397. *****************************************************************
  398. *    縦方向の表示する長さを求める                *
  399. *****************************************************************
  400. y_line_set:
  401.     move.w    tate(pc),d0
  402.     cmp.w    #512,d0
  403.     bcs    y_line1
  404.     move.w    #512,d0
  405. y_line1:
  406.     move.w    d0,bmp_yd        *bmp_ydot数
  407.     move.w    d0,y_line
  408.     rts
  409.  
  410. *****************************************************************
  411. *    表示                            *
  412. *****************************************************************
  413. bit8_prt:
  414.     tst.w    x_line_bk        *裏画面を表示するか
  415.     beq    bit8_prt1        *しない
  416.  
  417.     move.w    x_pos_bk(pc),gram_x    *表示座標
  418.     move.w    y_pos(pc),gram_y
  419.  
  420.     move.w    x_sabun_bk(pc),bmp_x    *表示範囲(x,y)
  421.     clr.w    bmp_y
  422.     move.w    x_line_bk(pc),bmp_xd
  423.     move.w    y_line(pc),bmp_yd
  424.  
  425.     bsr    get_bmp_addr
  426.     bsr    get_gram_addr
  427.     adda.l    #$c80000,a2
  428.     bsr    bit8_put
  429.  
  430. bit8_prt1:
  431.     move.w    x_pos(pc),gram_x    *表示座標
  432.     move.w    y_pos(pc),gram_y
  433.     clr.w    bmp_x            *表示範囲(x,y)
  434.     clr.w    bmp_y
  435.     move.w    x_line(pc),bmp_xd
  436.     move.w    y_line(pc),bmp_yd
  437.  
  438.     bsr    get_bmp_addr
  439.     bsr    get_gram_addr
  440.     adda.l    #GRAM,a2
  441.     bsr    bit8_put
  442.     rts
  443.  
  444. bit8_put:
  445.     move.w    bmp_xd(pc),d0        *横ドット数
  446.  
  447.     move.w    line_byte(pc),d1    *次のラインへのバイト数
  448.     add.w    d0,d1            *(転送元)
  449.     movea.w    d1,a3
  450.  
  451.     move.w    #512,d1            *表示データの1ライン下までの差分
  452.     sub.w    d0,d1            *(表示先)
  453.     add.w    d1,d1
  454.     movea.w    d1,a4
  455.  
  456.     addq.l    #1,a2            *転送先を奇数アドレスにする
  457.  
  458.     move.w    bmp_yd(pc),d7        *縦ループ数
  459.     subq.w    #1,d7            *dbraのため-1
  460.  
  461.     cmpi.b    #MC68060,MPUTYPE    *MC68060か
  462.     bcc    bit8_put60
  463.  
  464.     cmpi.w    #4,d0            *転送横サイズが4未満か
  465.     bcs    bit8_put60        *そう
  466.  
  467.     move.l    a1,d6            *転送もとが奇数アドレスか
  468.     btst.l    #0,d6
  469.     bne    bit8_putk
  470.  
  471.     move.w    d0,d4
  472.     andi.w    #$fffC,d0
  473.     andi.w    #$0003,d4
  474.  
  475.     cmpi.b    #MC68030,MPUTYPE    *MC68030か
  476.     bcc    bit8_put30
  477.  
  478. bit8_put00:                *MC68000用
  479.     movea.l    #1024,a4        *データの補正
  480.     add.w    d0,a2
  481.     add.w    d0,a2
  482.  
  483.     lea.l    bit8_put02(pc),a5    *ジャンプアドレス計算
  484.     move.w    d0,d1
  485.     lsr.w    #1,d1
  486.     add.w    d0,d1
  487.     sub.w    d1,a5
  488.  
  489. bit8_put01:
  490.     jmp    (a5)
  491.  
  492.     move.l    (a1)+,d6
  493.     movep.l    d6,-1024(a2)
  494.     move.l    (a1)+,d6
  495.     movep.l    d6,-1016(a2)
  496.     move.l    (a1)+,d6
  497.     movep.l    d6,-1008(a2)
  498.  
  499.     move.l    (a1)+,d6
  500.     movep.l    d6,-1000(a2)
  501.     move.l    (a1)+,d6
  502.     movep.l    d6,-992(a2)
  503.     move.l    (a1)+,d6
  504.     movep.l    d6,-984(a2)
  505.     move.l    (a1)+,d6
  506.     movep.l    d6,-976(a2)
  507.     move.l    (a1)+,d6
  508.     movep.l    d6,-968(a2)
  509.     move.l    (a1)+,d6
  510.     movep.l    d6,-960(a2)
  511.     move.l    (a1)+,d6
  512.     movep.l    d6,-952(a2)
  513.     move.l    (a1)+,d6
  514.     movep.l    d6,-944(a2)
  515.     move.l    (a1)+,d6
  516.     movep.l    d6,-936(a2)
  517.     move.l    (a1)+,d6
  518.     movep.l    d6,-928(a2)
  519.     move.l    (a1)+,d6
  520.     movep.l    d6,-920(a2)
  521.     move.l    (a1)+,d6
  522.     movep.l    d6,-912(a2)
  523.     move.l    (a1)+,d6
  524.     movep.l    d6,-904(a2)
  525.  
  526.     move.l    (a1)+,d6
  527.     movep.l    d6,-896(a2)
  528.     move.l    (a1)+,d6
  529.     movep.l    d6,-888(a2)
  530.     move.l    (a1)+,d6
  531.     movep.l    d6,-880(a2)
  532.     move.l    (a1)+,d6
  533.     movep.l    d6,-872(a2)
  534.     move.l    (a1)+,d6
  535.     movep.l    d6,-864(a2)
  536.     move.l    (a1)+,d6
  537.     movep.l    d6,-856(a2)
  538.     move.l    (a1)+,d6
  539.     movep.l    d6,-848(a2)
  540.     move.l    (a1)+,d6
  541.     movep.l    d6,-840(a2)
  542.     move.l    (a1)+,d6
  543.     movep.l    d6,-832(a2)
  544.     move.l    (a1)+,d6
  545.     movep.l    d6,-824(a2)
  546.     move.l    (a1)+,d6
  547.     movep.l    d6,-816(a2)
  548.     move.l    (a1)+,d6
  549.     movep.l    d6,-808(a2)
  550.  
  551.     move.l    (a1)+,d6
  552.     movep.l    d6,-800(a2)
  553.     move.l    (a1)+,d6
  554.     movep.l    d6,-792(a2)
  555.     move.l    (a1)+,d6
  556.     movep.l    d6,-784(a2)
  557.     move.l    (a1)+,d6
  558.     movep.l    d6,-776(a2)
  559.     move.l    (a1)+,d6
  560.     movep.l    d6,-768(a2)
  561.     move.l    (a1)+,d6
  562.     movep.l    d6,-760(a2)
  563.     move.l    (a1)+,d6
  564.     movep.l    d6,-752(a2)
  565.     move.l    (a1)+,d6
  566.     movep.l    d6,-744(a2)
  567.     move.l    (a1)+,d6
  568.     movep.l    d6,-736(a2)
  569.     move.l    (a1)+,d6
  570.     movep.l    d6,-728(a2)
  571.     move.l    (a1)+,d6
  572.     movep.l    d6,-720(a2)
  573.     move.l    (a1)+,d6
  574.     movep.l    d6,-712(a2)
  575.     move.l    (a1)+,d6
  576.     movep.l    d6,-704(a2)
  577.  
  578.     move.l    (a1)+,d6
  579.     movep.l    d6,-696(a2)
  580.     move.l    (a1)+,d6
  581.     movep.l    d6,-688(a2)
  582.     move.l    (a1)+,d6
  583.     movep.l    d6,-680(a2)
  584.     move.l    (a1)+,d6
  585.     movep.l    d6,-672(a2)
  586.     move.l    (a1)+,d6
  587.     movep.l    d6,-664(a2)
  588.     move.l    (a1)+,d6
  589.     movep.l    d6,-656(a2)
  590.     move.l    (a1)+,d6
  591.     movep.l    d6,-648(a2)
  592.     move.l    (a1)+,d6
  593.     movep.l    d6,-640(a2)
  594.     move.l    (a1)+,d6
  595.     movep.l    d6,-632(a2)
  596.     move.l    (a1)+,d6
  597.     movep.l    d6,-624(a2)
  598.     move.l    (a1)+,d6
  599.     movep.l    d6,-616(a2)
  600.     move.l    (a1)+,d6
  601.     movep.l    d6,-608(a2)
  602.  
  603.     move.l    (a1)+,d6
  604.     movep.l    d6,-600(a2)
  605.     move.l    (a1)+,d6
  606.     movep.l    d6,-592(a2)
  607.     move.l    (a1)+,d6
  608.     movep.l    d6,-584(a2)
  609.     move.l    (a1)+,d6
  610.     movep.l    d6,-576(a2)
  611.     move.l    (a1)+,d6
  612.     movep.l    d6,-568(a2)
  613.     move.l    (a1)+,d6
  614.     movep.l    d6,-560(a2)
  615.     move.l    (a1)+,d6
  616.     movep.l    d6,-552(a2)
  617.     move.l    (a1)+,d6
  618.     movep.l    d6,-544(a2)
  619.     move.l    (a1)+,d6
  620.     movep.l    d6,-536(a2)
  621.     move.l    (a1)+,d6
  622.     movep.l    d6,-528(a2)
  623.     move.l    (a1)+,d6
  624.     movep.l    d6,-520(a2)
  625.     move.l    (a1)+,d6
  626.     movep.l    d6,-512(a2)
  627.     move.l    (a1)+,d6
  628.     movep.l    d6,-504(a2)
  629.  
  630.     move.l    (a1)+,d6
  631.     movep.l    d6,-496(a2)
  632.     move.l    (a1)+,d6
  633.     movep.l    d6,-488(a2)
  634.     move.l    (a1)+,d6
  635.     movep.l    d6,-480(a2)
  636.     move.l    (a1)+,d6
  637.     movep.l    d6,-472(a2)
  638.     move.l    (a1)+,d6
  639.     movep.l    d6,-464(a2)
  640.     move.l    (a1)+,d6
  641.     movep.l    d6,-456(a2)
  642.     move.l    (a1)+,d6
  643.     movep.l    d6,-448(a2)
  644.     move.l    (a1)+,d6
  645.     movep.l    d6,-440(a2)
  646.     move.l    (a1)+,d6
  647.     movep.l    d6,-432(a2)
  648.     move.l    (a1)+,d6
  649.     movep.l    d6,-424(a2)
  650.     move.l    (a1)+,d6
  651.     movep.l    d6,-416(a2)
  652.     move.l    (a1)+,d6
  653.     movep.l    d6,-408(a2)
  654.  
  655.     move.l    (a1)+,d6
  656.     movep.l    d6,-400(a2)
  657.     move.l    (a1)+,d6
  658.     movep.l    d6,-392(a2)
  659.     move.l    (a1)+,d6
  660.     movep.l    d6,-384(a2)
  661.     move.l    (a1)+,d6
  662.     movep.l    d6,-376(a2)
  663.     move.l    (a1)+,d6
  664.     movep.l    d6,-368(a2)
  665.     move.l    (a1)+,d6
  666.     movep.l    d6,-360(a2)
  667.     move.l    (a1)+,d6
  668.     movep.l    d6,-352(a2)
  669.     move.l    (a1)+,d6
  670.     movep.l    d6,-344(a2)
  671.     move.l    (a1)+,d6
  672.     movep.l    d6,-336(a2)
  673.     move.l    (a1)+,d6
  674.     movep.l    d6,-328(a2)
  675.     move.l    (a1)+,d6
  676.     movep.l    d6,-320(a2)
  677.     move.l    (a1)+,d6
  678.     movep.l    d6,-312(a2)
  679.     move.l    (a1)+,d6
  680.     movep.l    d6,-304(a2)
  681.  
  682.     move.l    (a1)+,d6
  683.     movep.l    d6,-296(a2)
  684.     move.l    (a1)+,d6
  685.     movep.l    d6,-288(a2)
  686.     move.l    (a1)+,d6
  687.     movep.l    d6,-280(a2)
  688.     move.l    (a1)+,d6
  689.     movep.l    d6,-272(a2)
  690.     move.l    (a1)+,d6
  691.     movep.l    d6,-264(a2)
  692.     move.l    (a1)+,d6
  693.     movep.l    d6,-256(a2)
  694.     move.l    (a1)+,d6
  695.     movep.l    d6,-248(a2)
  696.     move.l    (a1)+,d6
  697.     movep.l    d6,-240(a2)
  698.     move.l    (a1)+,d6
  699.     movep.l    d6,-232(a2)
  700.     move.l    (a1)+,d6
  701.     movep.l    d6,-224(a2)
  702.     move.l    (a1)+,d6
  703.     movep.l    d6,-216(a2)
  704.     move.l    (a1)+,d6
  705.     movep.l    d6,-208(a2)
  706.  
  707.     move.l    (a1)+,d6
  708.     movep.l    d6,-200(a2)
  709.     move.l    (a1)+,d6
  710.     movep.l    d6,-192(a2)
  711.     move.l    (a1)+,d6
  712.     movep.l    d6,-184(a2)
  713.     move.l    (a1)+,d6
  714.     movep.l    d6,-176(a2)
  715.     move.l    (a1)+,d6
  716.     movep.l    d6,-168(a2)
  717.     move.l    (a1)+,d6
  718.     movep.l    d6,-160(a2)
  719.     move.l    (a1)+,d6
  720.     movep.l    d6,-152(a2)
  721.     move.l    (a1)+,d6
  722.     movep.l    d6,-144(a2)
  723.     move.l    (a1)+,d6
  724.     movep.l    d6,-136(a2)
  725.     move.l    (a1)+,d6
  726.     movep.l    d6,-128(a2)
  727.     move.l    (a1)+,d6
  728.     movep.l    d6,-120(a2)
  729.     move.l    (a1)+,d6
  730.     movep.l    d6,-112(a2)
  731.     move.l    (a1)+,d6
  732.     movep.l    d6,-104(a2)
  733.  
  734.     move.l    (a1)+,d6
  735.     movep.l    d6,-96(a2)
  736.     move.l    (a1)+,d6
  737.     movep.l    d6,-88(a2)
  738.     move.l    (a1)+,d6
  739.     movep.l    d6,-80(a2)
  740.     move.l    (a1)+,d6
  741.     movep.l    d6,-72(a2)
  742.     move.l    (a1)+,d6
  743.     movep.l    d6,-64(a2)
  744.     move.l    (a1)+,d6
  745.     movep.l    d6,-56(a2)
  746.     move.l    (a1)+,d6
  747.     movep.l    d6,-48(a2)
  748.     move.l    (a1)+,d6
  749.     movep.l    d6,-40(a2)
  750.     move.l    (a1)+,d6
  751.     movep.l    d6,-32(a2)
  752.     move.l    (a1)+,d6
  753.     movep.l    d6,-24(a2)
  754.     move.l    (a1)+,d6
  755.     movep.l    d6,-16(a2)
  756.     move.l    (a1)+,d6
  757.     movep.l    d6,-8(a2)
  758. bit8_put02:
  759.  
  760.     move.w    d4,d1
  761.     beq    bit8_put04
  762.     subq.w    #1,d1
  763.     moveq.l    #0,d0
  764. bit8_put03:
  765.     move.b    (a1)+,(a2,d0.w)
  766.     addq.l    #2,d0
  767.     dbra.w    d1,bit8_put03
  768. bit8_put04:
  769.     suba.l    a3,a1            *変換元アドレス更新
  770.     adda.l    a4,a2            *表示先アドレス更新
  771.     dbra    d7,bit8_put01
  772.     rts
  773.  
  774.  
  775. bit8_put30:                *MC68030以上用(タブソ)
  776.     lsr.w    #2,d0            *1/4
  777.     subq.w    #1,d0
  778. bit8_put31:
  779.     move.w    d0,d1
  780. bit8_put32:
  781.     move.l    (a1)+,d6
  782.     movep.l    d6,(a2)
  783.     addq.l    #8,a2
  784.     dbra.w    d1,bit8_put32
  785.  
  786.     move.w    d4,d1
  787.     beq    bit8_put34
  788.     subq.w    #1,d1
  789. bit8_put33:
  790.     move.b    (a1)+,(a2)
  791.     addq.l    #2,a2
  792.     dbra.w    d1,bit8_put33
  793. bit8_put34:
  794.     suba.l    a3,a1            *変換元アドレス更新
  795.     adda.l    a4,a2            *表示先アドレス更新
  796.     dbra.w    d7,bit8_put31
  797.     rts
  798.  
  799.  
  800. bit8_put60:                *転送もとアドレスが奇数の時
  801.     subq.w    #1,d0            *転送横サイズが4未満の時
  802. bit8_put61:
  803.     move.w    d0,d1
  804. bit8_put62:
  805.     move.b    (a1)+,(a2)
  806.     addq.l    #2,a2
  807.     dbra.w    d1,bit8_put62
  808.     suba.l    a3,a1            *変換元アドレス更新
  809.     adda.l    a4,a2            *表示先アドレス更新
  810.     dbra.w    d7,bit8_put61
  811.     rts
  812.  
  813.  
  814. bit8_putk:                *転送もとアドレスが奇数の時
  815.     cmpi.w    #5,d0            *転送横サイズが5以下か
  816.     bcs    bit8_put60        *そう
  817.  
  818.     subq.w    #1,d0
  819.     move.w    d0,d4
  820.     andi.w    #$fffC,d0
  821.     andi.w    #$0003,d4
  822.  
  823.     lsr.w    #2,d0
  824.     subq.w    #1,d0
  825.  
  826. bit8_putk1:
  827.     move.b    (a1)+,(a2)
  828.     addq.l    #2,a2
  829.     move.w    d0,d1
  830.  
  831. bit8_putk2:
  832.     move.l    (a1)+,d6
  833.     movep.l    d6,(a2)
  834.     addq.l    #8,a2
  835.     dbra.w    d1,bit8_putk2
  836.  
  837.     move.w    d4,d1
  838.     beq    bit8_putk4
  839.     subq.w    #1,d1
  840. bit8_putk3:
  841.     move.b    (a1)+,(a2)
  842.     addq.l    #2,a2
  843.     dbra.w    d1,bit8_putk3
  844. bit8_putk4:
  845.     suba.l    a3,a1            *変換元アドレス更新
  846.     adda.l    a4,a2            *表示先アドレス更新
  847.     dbra.w    d7,bit8_putk1
  848.     rts
  849.  
  850. *****************************************************************
  851. *    スクロール制御                        *
  852. *****************************************************************
  853. scroll:
  854.     moveq.l    #0,d2            *スクロール座標初期化
  855.     moveq.l    #0,d3
  856.  
  857.     clr.w    x_old
  858.     clr.w    y_old
  859.  
  860.     bsr    down_demo
  861.     bsr    right_demo
  862.  
  863.     tst.b    kflg            *キー入力待ち
  864.     beq    scroll8            *指定無し
  865.  
  866. scroll2:
  867.     bsr    key_chk            *キー入力チェック
  868. *    bsr    mouse_chk        *マウスからの入力チェック
  869.  
  870.     tst.b    esc_flg            *エスケープ入力有るか
  871.     bne    scroll9            *指定有り
  872.     tst.b    next_flg        *ネクスト入力有るか
  873.     bne    scroll9            *指定有り
  874.  
  875.     bsr    wait_chk        *ウェイト値の変更チェック
  876.     bsr    cursor_chk        *カーソルキーからの入力チェック
  877.     bsr    tenkey_chk        *テンキー入力チェック
  878.     bsr    mouse_chk        *マウスからの入力チェック
  879.     bsr    _PageSync        *768x512 256色モード
  880.     bsr    go_scroll
  881.     bra    scroll2            *キー入力に戻る
  882.  
  883. scroll8:
  884.     bsr    key_chk            *ESCくらいは入力チェック
  885.     bsr    mouse_chk        *マウスからの入力チェック
  886.  
  887. scroll9:
  888.     rts
  889.  
  890. *****************************************************************
  891. *    下方向へ全画面スクロールを行う                *
  892. *****************************************************************
  893. down_demo:
  894.     tst.w    y_max
  895.     beq    down_demo9
  896.  
  897.     move.w    s_dot8(pc),-(sp)
  898.     lsr.w    s_dot8
  899. down_demo0:
  900.     bsr    key_chk
  901.     bsr    cursor_chk
  902.     bsr    tenkey_chk
  903.     bsr    mouse_chk
  904.     tst.b    scroll_key
  905.     bne    down_demo8
  906.     tst.b    esc_flg
  907.     bne    down_demo8
  908.     tst.b    next_flg
  909.     bne    down_demo8
  910.  
  911.     bsr    _PageSync        *768x512 256色モード
  912.     bsr    down
  913.     cmp.w    y_max(pc),d3
  914.     bne    down_demo0
  915. down_demo8:
  916.     move.w    (sp)+,s_dot8
  917. down_demo9:
  918.     rts
  919.  
  920. *****************************************************************
  921. *    右方向へ全画面スクロールを行う                *
  922. *****************************************************************
  923. right_demo:
  924.     tst.w    x_max
  925.     beq    right_demo9
  926.     tst.w    d3
  927.     bne    right_demo9
  928.  
  929. *    move.w    y_max(pc),d0
  930. *    cmp.w    x_max(pc),d0
  931. *    bhi    right_demo9
  932.     move.w    s_dot8(pc),-(sp)
  933.     lsr.w    s_dot8
  934. right_demo0:
  935.     bsr    key_chk
  936.     bsr    cursor_chk
  937.     bsr    tenkey_chk
  938.     bsr    mouse_chk
  939.     tst.b    scroll_key
  940.     bne    right_demo8
  941.     tst.b    esc_flg
  942.     bne    right_demo8
  943.     tst.b    next_flg
  944.     bne    right_demo8
  945.  
  946.     bsr    _PageSync        *768x512 256色モード
  947.     bsr    right
  948.     cmp.w    x_max(pc),d2
  949.     bne    right_demo0
  950.  
  951. right_demo8:
  952.     move.w    (sp)+,s_dot8
  953. right_demo9:
  954.     rts
  955.  
  956. *****************************************************************
  957. *    ウェイト値の変更チェック                *
  958. *****************************************************************
  959. wait_chk:
  960.     movea.l    #$800,a0
  961.     btst.b    #2,8(a0)        *'-'が押されたか?
  962.     beq    wait_chk1
  963.  
  964.     tst.b    inkey_flg3
  965.     bne    wait_chk9
  966.  
  967.     st    inkey_flg3
  968.     subq.w    #1,_Wait
  969.     bpl    wait_chk9
  970.     clr.w    _Wait
  971.     bra    wait_chk9
  972.  
  973. wait_chk1:
  974.     btst.b    #6,8(a0)        *'+'
  975.     beq    wait_chk8
  976.  
  977.     tst.b    inkey_flg3
  978.     bne    wait_chk9
  979.  
  980.     st    inkey_flg3
  981.     addq.w    #1,_Wait
  982.     cmp.w    #4096,_Wait
  983.     bls    wait_chk9
  984.     move.w    #4096,_Wait
  985.     bra    wait_chk9
  986.  
  987. wait_chk8:
  988.     sf    inkey_flg3
  989.  
  990. wait_chk9:
  991.     rts
  992.  
  993. *****************************************************************
  994. *    スクロール                        *
  995. *****************************************************************
  996. go_scroll:
  997.     moveq.l    #0,d0
  998.     move.b    scroll_key(pc),d0
  999.     add.w    d0,d0
  1000.     add.w    d0,d0
  1001.     movea.l    scroll_tbl(pc,d0.w),a0
  1002.     jsr    (a0)
  1003.     rts
  1004.  
  1005. scroll_tbl:
  1006.     .dc.l    null            *0000    入力無し
  1007.     .dc.l    left            *0001    左
  1008.     .dc.l    up            *0010    上
  1009.     .dc.l    left_up            *0011    上左
  1010.     .dc.l    right            *0100    右
  1011.     .dc.l    null            *0101    右左
  1012.     .dc.l    right_up        *0110    右上
  1013.     .dc.l    up            *0111    右上左
  1014.     .dc.l    down            *1000    下
  1015.     .dc.l    left_down        *1001    下左
  1016.     .dc.l    null            *1010    下上
  1017.     .dc.l    left            *1011    下上左
  1018.     .dc.l    right_down        *1100    下右
  1019.     .dc.l    down            *1101    下右左
  1020.     .dc.l    right            *1110    下右上
  1021.     .dc.l    null            *1111    下右上左
  1022.     .even
  1023.  
  1024. *****************************************************************
  1025. *    入力無し                        *
  1026. *****************************************************************
  1027. null:
  1028.     rts
  1029.  
  1030. *****************************************************************
  1031. *    右下(手抜き)                        *
  1032. *****************************************************************
  1033. right_down:
  1034.     bsr    right
  1035.     bsr    down
  1036.     rts
  1037.  
  1038. *****************************************************************
  1039. *    左下(手抜き)                        *
  1040. *****************************************************************
  1041. left_down:
  1042.     bsr    left
  1043.     bsr    down
  1044.     rts
  1045.  
  1046. *****************************************************************
  1047. *    右上(手抜き)                        *
  1048. *****************************************************************
  1049. right_up:
  1050.     bsr    right
  1051.     bsr    up
  1052.     rts
  1053.  
  1054. *****************************************************************
  1055. *    左上(手抜き)                        *
  1056. *****************************************************************
  1057. left_up:
  1058.     bsr    left
  1059.     bsr    up
  1060.     rts
  1061.  
  1062. *****************************************************************
  1063. *    左へ                            *
  1064. *****************************************************************
  1065. left:
  1066.     sub.w    s_dot8(pc),d2
  1067. *    tst.w    d2
  1068.     bpl    left1
  1069.     clr.w    d2
  1070. left1:
  1071.     move.w    x_old(pc),d5        *何ドットずらすか
  1072.     sub.w    d2,d5
  1073.     beq    left9
  1074.  
  1075.     bsr    x_set
  1076.  
  1077.     move.w    d2,d0            *表示開始X座標
  1078.     add.w    x_pos(pc),d0
  1079.     and.w    #$1ff,d0
  1080.     move.w    d0,gram_x
  1081.  
  1082.     move.w    y_old(pc),d0        *表示開始Y座標
  1083.     add.w    y_pos(pc),d0
  1084.     and.w    #$1ff,d0
  1085.     move.w    d0,gram_y
  1086.  
  1087.     move.w    d2,bmp_x
  1088.     move.w    d5,bmp_xd
  1089.     move.w    y_old(pc),bmp_y
  1090.     move.w    y_line(pc),bmp_yd
  1091.  
  1092.     bsr    get_bmp_addr
  1093.  
  1094.     bsr    get_gram_addr
  1095.     adda.l    #GRAM,a2
  1096.     move.l    #$c80000,a5
  1097.  
  1098.     bsr    g8            *表の表示
  1099.  
  1100.     tst.w    x_line_bk        *裏を表示するか
  1101.     beq    left8
  1102.  
  1103.     bsr    get_bmp_addr
  1104.     adda.l    #256,a1
  1105.  
  1106.     bsr    get_gram_addr
  1107.     adda.l    #$c80000,a2
  1108.     move.l    #$d00000,a5
  1109.  
  1110.     bsr    g8            *裏の表示
  1111.  
  1112. left8:
  1113.     move.w    d2,x_old
  1114. left9:
  1115.     rts
  1116.  
  1117. *****************************************************************
  1118. *    上へ                            *
  1119. *****************************************************************
  1120. up:
  1121.     sub.w    s_dot8(pc),d3
  1122. *    tst.w    d3
  1123.     bpl    up1
  1124.     clr.w    d3
  1125. up1:
  1126.     move.w    y_old(pc),d6        *何ドットずらすか
  1127.     sub.w    d3,d6
  1128.     beq    up9
  1129.  
  1130.     move.w    x_old(pc),d0        *表示開始X座標
  1131.     add.w    x_pos(pc),d0
  1132.     and.w    #$1ff,d0
  1133.     move.w    d0,gram_x
  1134.  
  1135.     move.w    d3,d0            *表示開始Y座標
  1136.     add.w    y_pos(pc),d0
  1137.     and.w    #$1ff,d0
  1138.     move.w    d0,gram_y
  1139.  
  1140.     move.w    x_old(pc),bmp_x
  1141.     move.w    x_line(pc),bmp_xd
  1142.     move.w    d3,bmp_y
  1143.     move.w    d6,bmp_yd
  1144.  
  1145.     bsr    get_bmp_addr
  1146.  
  1147.     bsr    get_gram_addr
  1148.     adda.l    #GRAM,a2
  1149.     move.l    #$c80000,a5
  1150.  
  1151.     bsr    g8            *表の表示
  1152.  
  1153.     tst.w    x_line_bk        *裏を表示するか
  1154.     beq    up8
  1155.  
  1156.     move.w    x_old(pc),d0        *表示開始X座標補正
  1157.     add.w    x_pos_bk(pc),d0
  1158.     and.w    #$1ff,d0
  1159.     move.w    d0,gram_x
  1160.     move.w    x_line_bk(pc),bmp_xd    *ドット数補正
  1161.  
  1162.     bsr    get_bmp_addr
  1163.     adda.w    x_sabun_bk(pc),a1
  1164.  
  1165.     bsr    get_gram_addr
  1166.     adda.l    #$c80000,a2
  1167.     move.l    #$d00000,a5
  1168.  
  1169.     bsr    g8            *裏の表示
  1170.  
  1171.     bsr    y_set
  1172.  
  1173. up8:
  1174.     move.w    d3,y_old
  1175. up9:
  1176.     rts
  1177.  
  1178. *****************************************************************
  1179. *    右へ                            *
  1180. *****************************************************************
  1181. right:
  1182.     add.w    s_dot8(pc),d2
  1183.     cmp.w    x_max(pc),d2
  1184.     bls    right1
  1185.     move.w    x_max(pc),d2
  1186. right1:
  1187.     move.w    d2,d5            *何ドットずらすか
  1188.     sub.w    x_old(pc),d5
  1189.     beq    right9
  1190.  
  1191.     bsr    x_set
  1192.  
  1193.     move.w    x_old(pc),d0        *表示開始X座標
  1194.     add.w    x_pos(pc),d0
  1195.     add.w    #512,d0
  1196.     and.w    #$1ff,d0
  1197.     move.w    d0,gram_x
  1198.  
  1199.     move.w    y_old(pc),d0        *表示開始Y座標
  1200.     add.w    y_pos(pc),d0
  1201.     and.w    #$1ff,d0
  1202.     move.w    d0,gram_y
  1203.  
  1204.     move.w    x_old(pc),bmp_x
  1205.     add.w    #512,bmp_x
  1206.     move.w    d5,bmp_xd
  1207.     move.w    y_old(pc),bmp_y
  1208.     move.w    y_line(pc),bmp_yd
  1209.  
  1210.     bsr    get_bmp_addr
  1211.  
  1212.     bsr    get_gram_addr
  1213.     adda.l    #GRAM,a2
  1214.     move.l    #$c80000,a5
  1215.  
  1216.     bsr    g8            *表の表示
  1217.  
  1218.     tst.w    x_line_bk        *裏を表示するか
  1219.     beq    right8
  1220.  
  1221.     bsr    get_bmp_addr
  1222.     adda.l    #256,a1
  1223.  
  1224.     bsr    get_gram_addr
  1225.     adda.l    #$c80000,a2
  1226.     move.l    #$d00000,a5
  1227.  
  1228.     bsr    g8            *裏の表示
  1229.  
  1230. right8:
  1231.     move.w    d2,x_old
  1232. right9:
  1233.     rts
  1234.  
  1235. *****************************************************************
  1236. *    下へ                            *
  1237. *****************************************************************
  1238. down:
  1239.     add.w    s_dot8(pc),d3
  1240.     cmp.w    y_max(pc),d3
  1241.     bls    down1
  1242.     move.w    y_max(pc),d3
  1243. down1:
  1244.     bsr    y_set
  1245.  
  1246.     move.w    d3,d6            *何ドットずらすか
  1247.     sub.w    y_old(pc),d6
  1248.     beq    down9
  1249.  
  1250.     move.w    x_old(pc),d0        *表示開始X座標
  1251.     add.w    x_pos(pc),d0
  1252.     and.w    #$1ff,d0
  1253.     move.w    d0,gram_x
  1254.  
  1255.     move.w    y_old(pc),d0        *表示開始Y座標
  1256.     add.w    y_pos(pc),d0
  1257.     and.w    #$1ff,d0
  1258.     move.w    d0,gram_y
  1259.  
  1260.     move.w    x_old(pc),bmp_x
  1261.     move.w    x_line(pc),bmp_xd
  1262.     move.w    y_old(pc),bmp_y
  1263.     add.w    #512,bmp_y
  1264.     move.w    d6,bmp_yd
  1265.  
  1266.     bsr    get_bmp_addr
  1267.  
  1268.     bsr    get_gram_addr
  1269.     adda.l    #GRAM,a2
  1270.     move.l    #$c80000,a5
  1271.  
  1272.     bsr    g8            *表の表示
  1273.  
  1274.     tst.w    x_line_bk        *裏を表示するか
  1275.     beq    down8
  1276.  
  1277.     move.w    x_old(pc),d0        *表示開始X座標補正
  1278.     add.w    x_pos_bk(pc),d0
  1279.     and.w    #$1ff,d0
  1280.     move.w    d0,gram_x
  1281.     move.w    x_line_bk(pc),bmp_xd    *ドット数補正
  1282.  
  1283.     bsr    get_bmp_addr
  1284.     adda.w    x_sabun_bk(pc),a1
  1285.  
  1286.     bsr    get_gram_addr
  1287.     adda.l    #$c80000,a2
  1288.     move.l    #$d00000,a5
  1289.  
  1290.     bsr    g8            *裏の表示
  1291.  
  1292. down8:
  1293.     move.w    d3,y_old
  1294. down9:
  1295.     rts
  1296.  
  1297. *****************************************************************
  1298. *    画面の描き直し                        *
  1299. *****************************************************************
  1300. esc_rewrite:
  1301.     move.w    x_pos(pc),gram_x    *表示開始X座標
  1302.     move.w    y_pos(pc),gram_y    *表示開始Y座標
  1303.  
  1304.     move.w    d2,bmp_x
  1305.     move.w    x_line(pc),bmp_xd
  1306.     move.w    d3,bmp_y
  1307.     move.w    y_line(pc),bmp_yd
  1308.  
  1309.     clr.w    d2
  1310.     clr.w    d3
  1311.  
  1312.     bsr    x_set
  1313.     bsr    y_set
  1314.     bsr    get_bmp_addr
  1315.     bsr    get_gram_addr
  1316.     adda.l    #GRAM,a2
  1317.  
  1318.     bsr    bit8_put        *表の表示
  1319.  
  1320.     tst.w    x_line_bk        *裏を表示するか
  1321.     beq    rewrite_end
  1322.  
  1323.     move.w    x_pos_bk(pc),gram_x    *表示開始X座標補正
  1324.     move.w    x_line_bk(pc),bmp_xd    *ドット数補正
  1325.  
  1326.     bsr    get_bmp_addr
  1327.     adda.w    x_sabun_bk(pc),a1
  1328.     bsr    get_gram_addr
  1329.     adda.l    #$c80000,a2
  1330.  
  1331.     bsr    bit8_put        *裏の表示
  1332.  
  1333. rewrite_end:
  1334.     rts
  1335.  
  1336. *****************************************************************
  1337. *    スクロール分のグラフィックを表示する            *
  1338. *    gram_x, gram_y  表示先座標(GRAM)            *
  1339. *    bmp_x,  bmp_y   表示元座標(BMP)                *
  1340. *    bmp_xd, bmp_yd  ドット数                *
  1341. *****************************************************************
  1342. g8:
  1343.     move.w    bmp_xd(pc),d0        *横ドット数
  1344.     move.w    bmp_yd(pc),d7        *縦ドット数
  1345.  
  1346.     movea.w    line_byte(pc),a3    *次のラインへのバイト数
  1347.     adda.w    d0,a3            *(転送元)
  1348.  
  1349.     movea.l    #512,a4            *表示データの1ライン下までの差分
  1350.     suba.w    d0,a4            *(表示先)
  1351.     adda.l    a4,a4
  1352.  
  1353.     move.w    gram_x(pc),d6        *左右2回に分けての表示か
  1354.     add.w    bmp_xd(pc),d6
  1355.     cmp.w    #512,d6
  1356.     bhi    g8_3            *そう
  1357.  
  1358.     cmpi.b    #MC68060,MPUTYPE    *MC68060か
  1359.     bcc    g8_60
  1360.  
  1361.     cmpi.w    #4,d0            *転送横サイズが4未満か
  1362.     bcs    g8_60
  1363.  
  1364.     move.l    a1,d6            *転送もとが奇数アドレスか
  1365.     btst.l    #0,d6
  1366.     bne    g8_k
  1367.  
  1368. g8_1:
  1369.     move.w    d0,d4
  1370.     andi.w    #$fffC,d0
  1371.     andi.w    #$0003,d4
  1372.  
  1373.     lsr.w    #2,d0
  1374.     subq.w    #1,d0            *dbraのため-1
  1375.     subq.w    #1,d7            *dbraのため-1
  1376.  
  1377.     addq.l    #1,a2            *転送先を奇数アドレスにする
  1378. g8_11:
  1379.     move.w    d0,d1
  1380. g8_12:
  1381.     move.l    (a1)+,d6
  1382.     movep.l    d6,(a2)
  1383.     addq.l    #8,a2
  1384.     dbra.w    d1,g8_12
  1385.  
  1386.     move.w    d4,d1
  1387.     beq    g8_14
  1388.     subq.w    #1,d1
  1389. g8_13:
  1390.     move.b    (a1)+,(a2)
  1391.     addq.l    #2,a2
  1392.     dbra.w    d1,g8_13
  1393. g8_14:
  1394.     suba.l    a3,a1            *変換元アドレス更新
  1395.     adda.l    a4,a2            *表示先アドレス更新
  1396.     cmpa.l    a5,a2
  1397.     bcs    g8_15
  1398.     suba.l    #$80000,a2
  1399. g8_15:
  1400.     dbra    d7,g8_11
  1401.     rts
  1402.  
  1403.  
  1404. g8_3:                    *左右2回に分けて表示
  1405.  
  1406.     add.l    #1024,a4        *1ライン下までの差分を補正
  1407.  
  1408.     move.w    #512,d0            *横ドット1
  1409.     sub.w    gram_x(pc),d0
  1410.     move.w    bmp_xd(pc),d6        *横ドット2
  1411.     sub.w    d0,d6
  1412.  
  1413.     subq.w    #1,d0
  1414.     subq.w    #1,d6
  1415.     subq.w    #1,d7
  1416.  
  1417.     addq.l    #1,a2            *転送先を奇数アドレスにする
  1418. g8_30:
  1419.     move.w    d0,d1            *右側
  1420. g8_31:
  1421.     move.b    (a1)+,(a2)
  1422.     addq.l    #2,a2
  1423.     dbra    d1,g8_31
  1424. g8_32:
  1425.     move.w    d6,d1            *左側
  1426.     lea.l    -1024(a2),a2
  1427. g8_33:
  1428.     move.b    (a1)+,(a2)
  1429.     addq.l    #2,a2
  1430.     dbra    d1,g8_33
  1431.  
  1432.     suba.l    a3,a1            *変換元アドレス更新
  1433.     adda.l    a4,a2            *表示先アドレス更新
  1434.     cmpa.l    a5,a2
  1435.     bcs    g8_34
  1436.     suba.l    #$80000,a2
  1437. g8_34:
  1438.     dbra    d7,g8_30
  1439.     rts
  1440.  
  1441.  
  1442. g8_k:
  1443.     cmpi.w    #5,d0            *転送横サイズが5以下か
  1444.     bls    g8_60            *そう
  1445.  
  1446.     subq.w    #1,d0
  1447.     move.w    d0,d4
  1448.     andi.w    #$fffC,d0
  1449.     andi.w    #$0003,d4
  1450.  
  1451.     lsr.w    #2,d0
  1452.     subq.w    #1,d0            *dbraのため-1
  1453.     subq.w    #1,d7            *dbraのため-1
  1454.  
  1455.     addq.l    #1,a2            *転送先を奇数アドレスにする
  1456. g8_k1:
  1457.     move.b    (a1)+,(a2)
  1458.     addq.l    #2,a2
  1459.     move.w    d0,d1
  1460. g8_k2:
  1461.     move.l    (a1)+,d6
  1462.     movep.l    d6,(a2)
  1463.     addq.l    #8,a2
  1464.     dbra.w    d1,g8_k2
  1465.  
  1466.     move.w    d4,d1
  1467.     beq    g8_k4
  1468.     subq.w    #1,d1
  1469. g8_k3:
  1470.     move.b    (a1)+,(a2)
  1471.     addq.l    #2,a2
  1472.     dbra.w    d1,g8_k3
  1473. g8_k4:
  1474.     suba.l    a3,a1            *変換元アドレス更新
  1475.     adda.l    a4,a2            *表示先アドレス更新
  1476.     cmpa.l    a5,a2
  1477.     bcs    g8_k5
  1478.     suba.l    #$80000,a2
  1479. g8_k5:
  1480.     dbra    d7,g8_k1
  1481.     rts
  1482.  
  1483.  
  1484. g8_60:
  1485.     subq.w    #1,d0            *dbraのため-1
  1486.     subq.w    #1,d7            *dbraのため-1
  1487.  
  1488.     addq.l    #1,a2            *転送先を奇数アドレスにする
  1489. g8_61:
  1490.     move.w    d0,d1
  1491. g8_62:
  1492.     move.b    (a1)+,(a2)
  1493.     addq.l    #2,a2
  1494.     dbra    d1,g8_62
  1495.  
  1496.     suba.l    a3,a1            *変換元アドレス更新
  1497.     adda.l    a4,a2            *表示先アドレス更新
  1498.     cmpa.l    a5,a2
  1499.     bcs    g8_63
  1500.     suba.l    #$80000,a2
  1501. g8_63:
  1502.     dbra    d7,g8_61
  1503.     rts
  1504.  
  1505. *****************************************************************
  1506. *    BMPデータのアドレスを取得                *
  1507. *****************************************************************
  1508. get_bmp_addr:
  1509.     move.w    tate(pc),d0        *グラフィックデータの先頭
  1510.     subq.w    #1,d0            *(tate-1-bmp_y)*line_byte+bmp_x+gr_addr
  1511.     sub.w    bmp_y(pc),d0
  1512.     mulu.w    line_byte(pc),d0
  1513.     add.l    gr_addr(pc),d0
  1514.     movea.l    d0,a1
  1515.     adda.w    bmp_x(pc),a1
  1516.     rts
  1517.  
  1518. *****************************************************************
  1519. *    GRAMのアドレスを取得                    *
  1520. *****************************************************************
  1521. get_gram_addr:
  1522.     move.w    gram_x(pc),d0        *表示先画像アドレス
  1523.     move.w    gram_y(pc),d1        *gram_y*1024+gram_x*2
  1524.     swap.w    d1
  1525.     clr.w    d1
  1526.     ror.l    #6,d1
  1527.     add.w    d0,d0
  1528.     add.w    d0,d1
  1529.     movea.l    d1,a2
  1530.     rts
  1531.  
  1532. *****************************************************************
  1533. *    ワークエリア                        *
  1534. *****************************************************************
  1535.     .bss
  1536.     .even
  1537. dpal_buf:
  1538.     .ds.b    256*2*4*4
  1539.  
  1540. gram_x    .ds.w    1            *表示する座標(GRAM)
  1541. gram_y    .ds.w    1
  1542.  
  1543. bmp_x    .ds.w    1            *表示する座標(BMP)
  1544. bmp_y    .ds.w    1
  1545. bmp_xd    .ds.w    1            *表示するドット数
  1546. bmp_yd    .ds.w    1
  1547.  
  1548. x_line:
  1549.     .ds.w    1            *表画面の横ドット数
  1550. y_line:
  1551.     .ds.w    1            *縦ドット数
  1552. x_line_bk:
  1553.     .ds.w    1            *裏画面の横ドット数
  1554. x_pos_bk:
  1555.     .ds.w    1            *裏画面の表示位置X
  1556. x_sabun_bk:
  1557.     .ds.w    1            *表画面と裏画面のX方向の差分
  1558. x_old:
  1559.     .ds.w    1            *前回のX座標
  1560. y_old:
  1561.     .ds.w    1            *前回のY座標
  1562.     .even
  1563.